<?php
class Factura_model extends CI_Model {
    
    //constructor de la clase
    function __construct() {
        //LLamar al constructor del Modelo
        parent::__construct();
    }    
    
    function obtener_proveedores()
    {        
        $sentencia="SELECT id_proveedor, nombre_proveedor FROM sib_proveedor ORDER BY nombre_proveedor";
        $query=$this->db->query($sentencia);

        return $query->result();
    }

    function obtener_fuentes_fondo()
    {        
        $sentencia="SELECT id_fuente_fondo, nombre_fuente_fondo FROM sib_fuente_fondo ORDER BY nombre_fuente_fondo";
        $query=$this->db->query($sentencia);

        return $query->result();
    }    
    
    function obtener_secciones()
    {        
        $sentencia="SELECT id_seccion, nombre_seccion FROM org_seccion ORDER BY nombre_seccion";
        $query=$this->db->query($sentencia);

        return $query->result();
    }        

    function obtener_facturas($data='')
    {    
        $where="WHERE a.numero_factura LIKE '%$data%' OR b.nombre_proveedor LIKE '%$data%'";
        $sentencia="
        SELECT a.numero_factura, DATE_FORMAT(a.fecha_ingreso, '%d/%m/%Y') as fecha_ingreso, b.nombre_proveedor, 
        d.nombre_fuente_fondo, IF(SUM(e.total)>0,SUM(e.total),0) AS total, c.estado_factura, a.id_factura
        
        FROM sib_factura AS a LEFT JOIN sib_proveedor AS b ON a.id_proveedor = b.id_proveedor
        LEFT JOIN sib_estado_factura AS c ON a.id_estado_factura = c.id_estado_factura
        LEFT JOIN sib_fuente_fondo AS d ON a.id_fuente_fondo = d.id_fuente_fondo
        LEFT JOIN sib_factura_has_producto AS e ON a.id_factura = e.id_factura ".$where." GROUP BY a.id_factura ORDER BY a.id_factura DESC LIMIT 10";
        $query=$this->db->query($sentencia);

        return $query->result();
    }        

    function liquidar_facturas($data)
    {
        $this->load->library('session');
        $this->db->query("UPDATE sib_factura SET id_estado_factura=2 WHERE id_factura=$data");
        if ($this->db->affected_rows() > 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura Liquidada',
                      text: 'Factura con Id: $data liquidada exitosamente',
                      type: 'success',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                   ");
        }
    }            

    function guardar_facturas($data)
    {
        $this->load->library('session');
        $this->db->insert('sib_factura', $data); 
        if ($this->db->affected_rows() > 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura Guardada',
                      text: 'Factura Guardada exitosamente',
                      type: 'success',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                   ");
        }
    }         
    
    function obtener_detalle_factura($data)
    {
        $sentencia="SELECT  c.nombre_producto, d.nombre_unidad,  a.cantidad, a.precio, a.total, e.estado, a.id_factura_has_producto

        FROM sib_factura_has_producto AS a, sib_producto_has_objeto_especifico AS b, 
        sib_producto AS c, sib_unidad_medida_producto AS d, sib_estado_factura_producto AS e

        WHERE a.id_producto_has_especifico=b.id_producto_has_objeto_especifico AND b.id_producto=c.id_producto AND 
        c.id_unidad_medida_producto=d.id_unidad_medida_producto AND a.id_estado=e.id_estado_factura_producto AND a.id_factura=$data ORDER BY a.id_factura_has_producto";

        $query=$this->db->query($sentencia);
        $this->obtener_proveedor_numero_factura($data);
        
        return $query->result();
    }     


    function obtener_proveedor_numero_factura($data)
    {
        //seteando nombre de proveedor y numero de factura
        $queryFactura="SELECT a.numero_factura, b.nombre_proveedor
        FROM sib_factura AS a, sib_proveedor AS b
        WHERE a.id_proveedor=b.id_proveedor AND a.id_factura=$data";
        $query=$this->db->query($queryFactura);
        

       foreach ($query->result() as $row)
       {
            $this->session->set_userdata('factura_proveedor', "$row->nombre_proveedor");
            $this->session->set_userdata('factura_numero', "$row->numero_factura");
       }
        
        //return $query->result();
    }  

    function obtener_enbacezado_factura($data)
    {
        $sentencia="SELECT a.numero_factura, a.id_proveedor, DATE_FORMAT(a.fecha_factura, '%d/%m/%Y') AS fecha_factura, a.id_fuente_fondo, a.numero_compromiso, 
        a.numero_orden_compra, a.nombre_proveedor, a.id_seccion, a.id_factura, b.nombre_proveedor as nprov
        FROM sib_factura as a, sib_proveedor as b
        WHERE a.id_proveedor=b.id_proveedor AND id_factura=$data";

        $query=$this->db->query($sentencia);

        return $query->result();
    }

    function modificar($data)
    {
        $id_factura=$this->input->post('id_factura');

        $this->db->query("SELECT id_factura FROM sib_factura WHERE id_cierre=0 AND id_factura=$id_factura");
        if ($this->db->affected_rows() == 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura',
                      text: 'Factura con Id: $id_factura Corresponde a un periodo de cierre efectuado, imposible modificar',
                      type: 'error',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                  ");    
        }else{
            $this->db->where('id_factura', $this->input->post('id_factura'));
            $this->db->update('sib_factura', $data); 

            if ($this->db->affected_rows() > 0){
                $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Factura',
                          text: 'Factura Modificada exitosamente',
                          type: 'success',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");
            }
        }
    }

/*    function detalle_cargar($data)//aun no utlizado
    {
        $sentencia="SELECT  c.nombre_producto, d.nombre_unidad,  a.cantidad, a.precio, a.total, e.estado, a.id_factura_has_producto

        FROM sib_factura_has_producto AS a, sib_producto_has_objeto_especifico AS b, 
        sib_producto AS c, sib_unidad_medida_producto AS d, sib_estado_factura_producto AS e

        WHERE a.id_producto_has_especifico=b.id_producto_has_objeto_especifico AND b.id_producto=c.id_producto AND 
        c.id_unidad_medida_producto=d.id_unidad_medida_producto AND a.id_estado=e.id_estado_factura_producto AND a.id_factura=$data";

        $query=$this->db->query($sentencia);
        $this->obtener_proveedor_numero_factura($data);
        
        return $query->result();
    }  */

    function liquidar_reversa($data)
    {
        
        $this->db->query("SELECT id_factura FROM sib_factura WHERE id_cierre=0 AND id_factura=$data");
        if ($this->db->affected_rows() == 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura',
                      text: 'Factura con Id: $data Corresponde a un periodo de cierre efectuado, imposible habilitar',
                      type: 'error',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                  ");    
        }else{
        $this->db->query("UPDATE sib_factura SET id_estado_factura=1 WHERE id_factura=$data");
            if ($this->db->affected_rows() > 0){
                $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Factura',
                          text: 'Factura con Id: $data Habilitada',
                          type: 'success',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");
            }            
        }
    }
    
    function obtener_lista_productos($data)
    {
        $sentencia="SELECT a.numero_producto, b.nombre_oe, c.nombre_producto, d.nombre_unidad, a.id_producto_has_objeto_especifico
        FROM sib_producto_has_objeto_especifico as a, sib_objeto_especifico as b, sib_producto as c, sib_unidad_medida_producto as d
        WHERE a.id_objeto_especifico=b.id_objeto_especifico AND a.id_producto=c.id_producto AND a.id_producto=c.id_producto 
        AND c.id_unidad_medida_producto = d.id_unidad_medida_producto";

        $query=$this->db->query($sentencia);        
        
        return $query->result();
    }  
    
    function detalle_registro($data)
    {
        $id_factura=$this->input->post('id_factura');
        $id_producto_has_especifico=$this->input->post('id_producto_has_especifico');
        $existeProducto=0;

        $this->db->query("SELECT id_producto_has_especifico FROM sib_factura_has_producto WHERE id_factura=$id_factura AND 
        id_producto_has_especifico=$id_producto_has_especifico");
        if ($this->db->affected_rows() > 0){
          $existeProducto=1;
        }

        
         $this->db->query("SELECT id_factura FROM sib_factura WHERE id_estado_factura=1 AND id_factura=$id_factura");
         $estaliquidada = $this->db->affected_rows();


        $this->db->query("SELECT id_factura FROM sib_factura WHERE id_cierre=0 AND id_factura=$id_factura");
        if ($this->db->affected_rows() == 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura',
                      text: 'Factura con Id: $id_factura Corresponde a un período de cierre efectuado, imposible agregar detalle',
                      type: 'error',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                  ");    
        }elseif($existeProducto==1){            
                $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Detalle de Factura',
                          text: 'Este producto ya existe en el detalle de la factura, imposible volver a registrar',
                          type: 'error',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");        
        }elseif($estaliquidada==0){            
                $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Detalle de Factura',
                          text: 'Factura Liquidada, imposible agregar detalle',
                          type: 'error',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");                        
        }else{
            $this->load->library('session');
            $this->db->insert('sib_factura_has_producto', $data); 
            if ($this->db->affected_rows() > 0){
                $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Detalle de Factura',
                          text: 'Detalle de Factura Guardado exitosamente',
                          type: 'success',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");
            }
        }
    }

    function detalle_factura_eliminar($data)
    {
        $borrar=0;      
        $id_factura = $this->uri->segment(4);
        
         $this->db->query("SELECT id_factura FROM sib_factura WHERE id_cierre=0 AND id_factura=$id_factura");
         $estacerrada = $this->db->affected_rows();
         $this->db->query("SELECT id_factura FROM sib_factura WHERE id_estado_factura=1 AND id_factura=$id_factura");
         $estaliquidada = $this->db->affected_rows();

        if ($estacerrada == 0){
            $this->session->set_userdata('notify0', "<script>
                    new PNotify({
                      title: 'Factura Detalle',
                      text: 'Factura con Id: $data Corresponde a un periodo de cierre efectuado, imposible borrar detalle',
                      type: 'error',                  
                      styling: 'bootstrap3'
                    })
                   </script>
                  ");    
            
        }else if ($estaliquidada == 0){
              $this->session->set_userdata('notify0', "<script>
                      new PNotify({
                        title: 'Factura Detalle',
                        text: 'No puede borrar detalle de factura liquidada',
                        type: 'error',                  
                        styling: 'bootstrap3'
                      })
                     </script>
                    ");    
        }else{
        $sentencia="DELETE FROM sib_factura_has_producto WHERE id_factura_has_producto = $data";

        $query=$this->db->query($sentencia); 

                        $this->session->set_userdata('notify0', "<script>
                        new PNotify({
                          title: 'Detalle de Factura',
                          text: 'Detalle de Factura Eliminado exitosamente',
                          type: 'success',                  
                          styling: 'bootstrap3'
                        })
                       </script>
                       ");
        }        
    }  
}
?>